package main

import "fmt"

type Person struct {
	Name string
	Age  int
}

func main() {
	var p1 Person
	p1.Age = 10
	p1.Name = "小明"
	var p2 *Person = &p1 //这里是关键-->画出示意图

	fmt.Println(p2.Age) //此时p1,p2都是同一个对象
	fmt.Println(p2.Name)
	p2.Name = "tom~"                                            //因为p1,p2都是同一个指针，所以修改p2,p1也会直接被修改
	fmt.Printf("p2.Name=%v p1.Name=%v \n", p2.Name, p1.Name)    //tom~ tom~
	fmt.Printf("p2.Name=%v p1.Name=%v \n", (*p2).Name, p1.Name) //tom~ tom~

	fmt.Printf("p1的地址%p \n", &p1)
	fmt.Printf("p2的地址%p p2的值%p \n", &p2, p2)

	//var p1 Person
	//p1.Age = 10
	//p1.Name = "小明"
	//var p2 *Person = &p1
	//
	//fmt.Println(*p2.Age) //能不能这样写？
	//不能这样写，会报错，原因是.的运行符优先级比*高
}
